package net.suplementos.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import net.suplementos.exception.DAOException;
import net.suplementos.pojo.Atendimento;
import net.suplementos.pojo.Produto;

public class ProdutoDAO extends JPAAbstractDAO<Produto, Integer> {

	public ProdutoDAO(EntityManager manager) throws DAOException {
	    super(manager);
	}
	
	protected Class<Produto> doGetClass() {
		return Produto.class;
	}
	
	public List<Produto> listarTodosAtivas() throws DAOException {
		String consulta = "select p from Produto p where p.ativo = true";
		return consultar(consulta);
	}
	
	public List<Produto> consultar(Produto produto) throws DAOException {
       	StringBuilder hql = new StringBuilder("select registro from Produto registro where 1 = 1 ");
       	List<Object> parametros = new ArrayList<Object>();

    	if (produto.getId() != null) {
    		hql.append("and registro.id = ?");
    		parametros.add(produto.getId());
    	}
    	if (produto.getAtivo() != null) {
    		hql.append("and registro.ativo = ?");
    		parametros.add(produto.getAtivo());
    	}
    	if (produto.getDescricao() != null && !produto.getDescricao().trim().equals("")) {
    		hql.append("and registro.descricao like ?");
    		parametros.add("%" + produto.getDescricao() + "%");
    	}
    	if (produto.getCategoria() != null && produto.getCategoria().getId() != null) {
    		hql.append("and registro.categoria.id = ?");
    		parametros.add(produto.getCategoria());
    	}
    	if (produto.getMarca() != null && produto.getMarca().getId() != null) {
    		hql.append("and registro.marca.id = ?");
    		parametros.add(produto.getMarca());
    	}
    	if (produto.getNome() != null && !produto.getNome().trim().equals("")) {
    		hql.append("and registro.nome = ?");
    		parametros.add("%" + produto.getNome() + "%");
    	}
    	if (produto.getValor() != 0) {
    		hql.append("and registro.valor = ?");
    		parametros.add(produto.getValor());
    	}

    	return consultar(hql.toString(), parametros.toArray(new Object[parametros.size()]));
	}
	
	public List<Produto> consultarListaProdutoAtendimento(Atendimento atendimento) throws DAOException {
		StringBuilder hql = new StringBuilder();
		hql.append("select  p.nome, m.titulo, c.titulo, p.valor, pa.quantidade_produto ");
		hql.append("from produto_atendimento pa, produto p, categoria c, marca m");
		hql.append("where pa.atendimento_id= ?");
		hql.append("and pa.produto_id = p.id");
		hql.append("and p.categoria_id = c.id");
		hql.append("and p.marca_id = m.id");
		
		/*select  p.nome, m.titulo, c.titulo, p.valor, pa.quantidade_produto
		from produto_atendimento pa, produto p, categoria c, marca m
		where pa.atendimento_id = 1
		and pa.produto_id = p.id
		and p.categoria_id = c.id
		and p.marca_id = m.id*/
		
		List<Produto> produtos = consultar(hql.toString(), atendimento.getId());

		if (produtos == null || produtos.isEmpty()) {
			return null;
		}

		return produtos;
	}
}
